虽说C语言学了好多年了,但是还是很多东西没有真正搞清楚啊。
define|typedef|static|const|数组&指针|多维数组
define宏定义
1 | 一般形式为: |
typedef
1 | 用来给类型起个新名字 |
1 | #define INT1 int* |
还可以用来定义机器无关的类型1
2
3
4
5
6你可以定义一个叫 REAL 的浮点类型,在目标机器上它可以获得最高的精度:
typedef long double REAL;
在不支持 long double 的机器上,该 typedef 看起来会是下面这样:
typedef double REAL;
并且,在连 double 都不支持的机器上,该 typedef 看起来会是这样:
typedef float REAL;
static
修饰局部变量时,称为静态变量。
1
2可以提高局部变量的持久性(改变生存周期),函数调用结束时,该变量并不会释放,第二次调用函数时,值还是之前的。
会在静态数据区创建,初始值为0.修饰函数,该函数的作用域为当前文件 & 不能修改任何非static对象。
- 修饰全局变量,限定作用域为当前文件。
const关键字
- 不是常量,是一个只读变量
- 不能放在case关键字后面也说明const不是一个常量。
- 定义时赋值,之后不允许修改。
修饰普通变量
1
2
3const int a;
a还是一个int型变量,const int 顺序可以互换:
int const a;修饰数组
1
2
3const int a[5];
int const a[5];
只读数组修饰指针
1
2
3
4const char *p;
char const *p;//这两种,const都是修饰*p,则p指向的变量只读。(与下一种对照记忆)
char * const p;//const很明显修饰指针p,则指针p不能被修改。
const char * const p;//指针p不能被修改,指向的对象也不能被修改。还可以用在函数传值,增强程序健壮性
1
2
3
4
5
6void apple(const char *a){//防止修改a指向的字符串
...
}
void apple(char * const a){//防止修改a本身
...
}
数组&指针
1 | char *p="hello";//字符串是一个只读的常量 |
多维数组
C语言不能像一位数组那样,给函数传递一个多维数组。
只能再函数的形参处写明除第一下标之外的其他下标。1
2
3
4
5
6
7
8int function(int a[]);
int a[10];
function(a);
-----------------------------------
int function(int a[][3][4]);//需写明下标
int a[4][3][4];
function(a);
欢迎与我分享你的看法。
转载请注明出处:http://taowusheng.cn/